//
// Created by tanzx on 2023/12/8.
//
#include "shape.h"
/**
 * 在 C++ 中，virtual 关键字可以用于声明虚函数。虚函数是一种特殊的类成员函数，允许在子类中重写父类的实现。
 * 当一个类中的函数被声明为虚函数时，如果这个类被子类继承，子类可以覆盖这个函数的实现，而不会改变函数的调用方式。这就是所谓的多态性（polymorphism）。
 * 在 C++ 中，要使用虚函数，需要满足以下条件：
 * 1、声明虚函数：在父类中声明虚函数，使用 virtual 关键字。
 * 2、重写虚函数：在子类中重新定义父类的虚函数，函数名、参数类型和返回值类型必须完全相同，使用 override 关键字。
 * 3、使用动态绑定：在使用指向对象的指针或引用调用虚函数时，会在运行时确定函数的具体实现，而不是在编译时确定。
 * @return
 */
void test_virtual() {
    Shape* shape = new Rectangle();
    shape->draw(); // 输出 "Drawing a Rectangle"
    delete shape;
    Shape shape1;
    shape1.draw(); // Outputs "Drawing a Shape"
}